(function (window) {
    // 定义了一个构造函数，该构造函数接收执行器函数(executor)
    function Promise(executor) {
        // 增加实例属性state，初始值为pending
        this.state = "pending";
        // 增加实例属性result,初始值为undefined
        this.result = undefined;
        const _resolve = value => {
            // 如果状态发生变化，那么后续代码不会执行
            if (this.state !== "pending") return;
            // 将当前的状态更改为fulfilled,值为接收的value
            this.state = "fulfilled";
            this.result = value;
        }
        const _reject = value => {
            // 如果状态发生变化，那么后续代码不会执行
            if (this.state !== "pending") return;
            // 将当前的状态更改为rejected,值为接收的value
            this.state = "rejected";
            this.result = value;
        }
        try {
            executor(_resolve, _reject);
        } catch (err) {
            // 如果状态发生变化，那么后续代码不会执行
            _reject(err)
        }
    }
    Object.assign(Promise.prototype,{
        // 1- 接收两个回调函数（onResolved成功回调，onRejected失败回调）
        // 2- 如果状态为成功，则调用onResolved函数
        // 3- 如果状态为失败，则调用onRejected函数
        then(onResolved,onRejected){
            // 判断状态是否为成功
            if(this.state === "fulfilled"){
                onResolved(this.result);// 调用成功回调，并将成功值传递过去
            }else if(this.state === "rejected"){
                // 判断状态是否为失败
                onRejected(this.result);// 调用失败回调，并将失败值传递过去
            }
        },
        catch(){
        }
    })
    window.Promise = Promise;
})(window);